package com.yqg.manage.utils;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 案件流程设计示例
 */
public class NextNode {
    public static void main(String[] args) {
//        某程序类型的当前节点 KEY 下一个节点列表: value
        Map<String, List<String>> mapData = new HashMap<>();

        // TODO 查询数据库填充 mapdata

        // 创建一个Random对象
        Random random = new Random();
        // 填充测试数据
        for (int program = 1; program <= 2; program++) {
            for (int node = 1; node <= 20; node++) {
                String key = "程序" + program + "节点" + node;
                List<String> valueList = new ArrayList<>();

                // 随机决定元素数量（1到3个）
                int size = random.nextInt(3) + 3;

                // 根据随机数生成对应数量的元素并添加到valueList中
                for (int i = 0; i < size; i++) {
                    valueList.add("节点" + node);
                }

                mapData.put(key, valueList);
            }
        }

        mapData.forEach((s, strings) -> {
                System.out.println("某程序类型的当前节点["+s+"]下一个节点列表:"+ strings);
        });

        // 测试方法
        String key = "程序1节点2";
        int index = 0;
        int index1 = 1;
        int index2 = 2;
        List<String> valuesByIndexes = getValuesByIndexes(mapData, key, index, index1, index2);
        System.out.println("在——【" + key + "】-选择【" + index + "】得到：" + valuesByIndexes);
        System.out.println("解析节点得到文书"+getTpByNode(valuesByIndexes));
    }

    //根据node数组得到文书列表
    private static List<String> getTpByNode(List<String> valuesByIndexes) {
        return valuesByIndexes.stream()
                .flatMap(node-> getTpByNneNode(node).stream())
                .collect(Collectors.toList());
    }

    //根据单个node得到文书
    private static List<String> getTpByNneNode(String node) {

        //TODO 查数据库根据node活动文书id
        //填充假数据
        List<String> tps =new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            tps.add("文书" + i);
        }
        return tps;
    }

    // 定义一个方法，传入Map、键和List中值的索引，返回对应索引的值
    public static List<String> getValuesByIndexes(Map<String, List<String>> dataMap, String key, int... indexes) {
        if (dataMap.containsKey(key)) {
            List<String> valueList = dataMap.get(key);
            System.out.println("下一个节点可选数量：" + valueList.size());
            List<String> result = new ArrayList<>();
            for (int index : indexes) {
                if (index >= 0 && index < valueList.size()) {
                    result.add(valueList.get(index));
                } else {
                    throw new IndexOutOfBoundsException("索引 " + index + " 超出范围");
                }
            }

            return result;
        } else {
            throw new NoSuchElementException("键 " + key + " 不存在");
        }
    }
}